package 类与对象.递归;

public class Recursion01 {
    public static void main(String[] args) {
        A a = new A();
        a.test(4);
        System.out.println(a.factorial(4));
        System.out.println(a.fibonacci(7));
        System.out.println(a.peach(9));
    }
}

class A{
    public void test(int n){
        if(n > 2){
            test(n - 1);
        }
        System.out.println("n= " + n);
    }

    public int factorial(int n){
        if(n == 1){
            return 1;
        }else {
            return factorial(n - 1) * n;
        }
    }

    /*
        使用递归的方式求出裴波那契数1，1，2，3，5，8，13，...
        当n = 1 裴波那契数：1
        当n = 2 裴波那契数：1
        当n >= 3 裴波那契数：前面两个数之和
     */
    public int fibonacci(int n){
        if ( n >= 1) {
            if(n == 1 || n == 2){
                return 1;
            }else {
                return fibonacci(n - 1) + fibonacci(n - 2);
            }
        }else {
            System.out.println("输入要求>=1");
            return 0;
        }
    }

    /*
        有一堆桃子，猴子第一天吃了其中的一半，并且再多吃一个，以后每天猴子都吃其中的一半，然后再多吃一个，
        当到底10天时，想再吃时，发现只有1个桃子了，问题：最初共有多个桃子
        day09 / 2 - 1 = day10,即
        da09 = (day10 + 1) * 2
        da08 = (day19 + 1) * 2
     */
    public int peach(int day){
        if(day == 10){
            return 1;
        }else if(day >= 1 && day < 10){
            return (peach(day + 1) + 1) * 2;
        }else {
            return 0;
        }
    }
}

